home *** CD-ROM | disk | FTP | other *** search
- Path: xanth!cs.odu.edu!Amiga-Request
- From: Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator)
- Newsgroups: comp.sources.amiga
- Subject: v90i006: plplot 2.6 - C library for making scientific plots, Part05/12
- Message-ID: <10978@xanth.cs.odu.edu>
- Date: 14 Jan 90 23:21:59 GMT
- Sender: tadguy@cs.odu.edu
- Reply-To: Anthony M. Richardson <amr@dukee.egr.duke.edu>
- Lines: 2491
- Approved: tadguy@cs.odu.edu (Tad Guy)
-
- Submitted-by: Anthony M. Richardson <amr@dukee.egr.duke.edu>
- Posting-number: Volume 90, Issue 006
- Archive-name: applications/plplot-2.6/part05
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 5 (of 12)."
- # Contents: drivers/aegis.c drivers/dispatch.c drivers/iff.c
- # src/global.c src/plcntr.c src/plfill.c src/plzbx.c unix/dispatch.c
- # unix/impress.c unix/laserjetii.c
- # Wrapped by tadguy@xanth on Sun Jan 14 18:11:35 1990
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'drivers/aegis.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'drivers/aegis.c'\"
- else
- echo shar: Extracting \"'drivers/aegis.c'\" \(4782 characters\)
- sed "s/^X//" >'drivers/aegis.c' <<'END_OF_FILE'
- X/* This file contains drivers for the HP7475A plotter */
- X
- X#include "plplot.h"
- X#include <stdio.h>
- X#include <string.h>
- X
- X#define AEGX 10000
- X#define AEGY 10000
- X
- Xstatic FILE *OutDev;
- Xstatic PLINT select=0;
- Xstatic char FileName[80];
- Xstatic short *buffptr, bufflen;
- X#define BSIZE 25
- X
- Xvoid aegissetup(xdpi, ydpi, xwid, ywid)
- XPLINT xwid, ywid;
- XPLFLT xdpi, ydpi;
- X{
- X}
- X
- Xvoid aegisselect(ori, name)
- XPLINT ori;
- Xchar *name;
- X{
- X strncpy(FileName,name,sizeof(FileName)-1);
- X FileName[sizeof(FileName)-1] = '\0';
- X select = 1;
- X}
- X
- X/* Set up device specific stuff and initialize the device */
- Xvoid aegisinit()
- X{
- X /* setpxl() sets the dots/mm in the x and y directions */
- X setpxl((PLFLT)39.37, (PLFLT)39.37);
- X
- X /* setphy() sets the device coordinates. These are integer */
- X /* values. Set up for landscape orientation (long axis of page in the */
- X /* x direction). Origin is in the lower left hand corner. */
- X setphy(0,AEGX,0,AEGY);
- X
- X /* Set default pen color using scol(color). */
- X /* Any default pen color can be used but a black pen is probably best. */
- X scol(1);
- X
- X /* Set default pen width using swid(width) */
- X swid(1);
- X
- X /* Set device interaction mode using smod(mode). Set mode to 0 for */
- X /* a noninteractive device, Unless you are writing your */
- X /* own Amiga screen driver mode should be 0. */
- X smod(0);
- X
- X bufflen = 2*BSIZE;
- X buffptr = (short *)malloc(sizeof(short)*bufflen);
- X if(buffptr == NULL)
- X plexit("Out of memory!");
- X
- X}
- X
- X/* Sets to text mode */
- Xvoid aegistext()
- X{
- X}
- X
- X/* Sets to graphics mode */
- Xvoid aegisgraph()
- X{
- X}
- X
- Xstatic PLINT firstline;
- X/* Clears the page */
- Xvoid aegisclear()
- X{
- X void flushbuffer();
- X
- X /* Close the file */
- X if(!firstline) {
- X flushbuffer();
- X }
- X fclose(OutDev);
- X}
- X
- Xstatic short xlast, ylast;
- X
- Xvoid aegispage()
- X{
- X char line[80];
- X for(;;) {
- X if(!select) {
- X printf("Enter graphics file name. ");
- X fgets(line,sizeof(line),stdin);
- X if(sscanf(line,"%s",FileName)!=1)
- X continue;
- X }
- X
- X if (!(OutDev = fopen(FileName,"w"))) {
- X fprintf(stderr,"Can't open %s.\n",FileName);
- X select = 0;
- X }
- X else
- X break;
- X }
- X select = 0;
- X firstline = 1;
- X xlast = -10000; ylast = -10000;
- X
- X /* Write out header */
- X fprintf(OutDev,"81086 0.0 0.0 100.0 100.0 0 10.\n");
- X fprintf(OutDev,"\"%s\"\n-1\n",FileName);
- X}
- X
- Xstatic int curwid;
- Xvoid aegiswidth(width)
- XPLINT width;
- X{
- X void flushbuffer();
- X
- X flushbuffer();
- X firstline = 1;
- X
- X if(width <= 1)
- X curwid = 0;
- X else if(width >= 4)
- X curwid = 3;
- X else
- X curwid = width-1;
- X}
- X
- Xstatic int curcol;
- X/* Change the pen color */
- Xvoid aegiscolor(color)
- XPLINT color;
- X{
- X void flushbuffer();
- X
- X flushbuffer();
- X firstline = 1;
- X /* Aegis pen 1 is the "paper" color */
- X if (color >= 2 && color <=15)
- X curcol = color;
- X else
- X curcol = 0;
- X}
- X
- Xstatic short count, xmin, xmax, ymin, ymax;
- X
- X/* Draws a line from (x1,y1) to (x2,y2) */
- Xvoid aegisline(x1,y1,x2,y2)
- XPLINT x1,y1,x2,y2;
- X{
- X short *tempptr;
- X void flushbuffer();
- X
- X /* If starting point of this line is the same as the ending point of */
- X /* the previous line then don't raise the pen. (This really speeds up */
- X /* plotting and reduces the size of the file. */
- X if(firstline) {
- X count = 0;
- X *(buffptr+count++) = x1;
- X *(buffptr+count++) = y1;
- X *(buffptr+count++) = x2;
- X *(buffptr+count++) = y2;
- X xmin = min(x1,x2); ymin = min(y1,y2);
- X xmax = max(x1,x2); ymax = max(y1,y2);
- X firstline = 0;
- X }
- X else if(x1 == xlast && y1 == ylast) {
- X if(count+2 >= bufflen) {
- X bufflen += 2*BSIZE;
- X tempptr = (short *)realloc((void *)buffptr,bufflen*sizeof(short));
- X if(tempptr == NULL){
- X free((void *)buffptr);
- X plexit("Out of memory!");
- X }
- X buffptr = tempptr;
- X }
- X *(buffptr+count++) = x2;
- X *(buffptr+count++) = y2;
- X xmin = min(x2,xmin); ymin = min(y2,ymin);
- X xmax = max(x2,xmax); ymax = max(y2,ymax);
- X }
- X else {
- X flushbuffer();
- X *(buffptr+count++) = x1;
- X *(buffptr+count++) = y1;
- X *(buffptr+count++) = x2;
- X *(buffptr+count++) = y2;
- X xmin = min(x1,x2); ymin = min(y1,y2);
- X xmax = max(x1,x2); ymax = max(y1,y2);
- X }
- X
- X xlast = x2;
- X ylast = y2;
- X}
- X
- Xstatic void flushbuffer()
- X{
- X short i=0;
- X
- X fprintf(OutDev,"1 52 %.2f %.2f",xmin/100.,ymin/100.);
- X fprintf(OutDev," %.2f %.2f",xmax/100.,ymax/100.);
- X fprintf(OutDev," %d 0 0 %d 0\n",curcol,curwid);
- X while(i<count) {
- X fprintf(OutDev," 1 %.2f %.2f\n",*(buffptr+i)/100.,*(buffptr+i+1)/100.);
- X i += 2;
- X }
- X fprintf(OutDev," 0\n");
- X count = 0;
- X}
- X
- X/* Cleanup and close file. */
- Xvoid aegistidy()
- X{
- X flushbuffer();
- X free((VOID *)buffptr);
- X fclose(OutDev);
- X}
- X
- X
- X
- END_OF_FILE
- if test 4782 -ne `wc -c <'drivers/aegis.c'`; then
- echo shar: \"'drivers/aegis.c'\" unpacked with wrong size!
- fi
- # end of 'drivers/aegis.c'
- fi
- if test -f 'drivers/dispatch.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'drivers/dispatch.c'\"
- else
- echo shar: Extracting \"'drivers/dispatch.c'\" \(4680 characters\)
- sed "s/^X//" >'drivers/dispatch.c' <<'END_OF_FILE'
- X#include "plplot.h"
- X#include "dispatch.h"
- X
- Xvoid amisetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid amiselect PLARGS((PLINT or, char *file));
- Xvoid amiinit PLARGS((void));
- Xvoid amiline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid amiclear PLARGS((void));
- Xvoid amipage PLARGS((void));
- Xvoid amitidy PLARGS((void));
- Xvoid amicolor PLARGS((PLINT color));
- Xvoid amitext PLARGS((void));
- Xvoid amigraph PLARGS((void));
- Xvoid amiwidth PLARGS((PLINT width));
- X
- Xvoid prefsetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid prefselect PLARGS((PLINT or, char *file));
- Xvoid prefinit PLARGS((void));
- Xvoid prefline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid prefclear PLARGS((void));
- Xvoid prefpage PLARGS((void));
- Xvoid preftidy PLARGS((void));
- Xvoid prefcolor PLARGS((PLINT color));
- Xvoid preftext PLARGS((void));
- Xvoid prefgraph PLARGS((void));
- Xvoid prefwidth PLARGS((PLINT width));
- X
- Xvoid iffsetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid iffselect PLARGS((PLINT or, char *file));
- Xvoid iffinit PLARGS((void));
- Xvoid iffline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid iffclear PLARGS((void));
- Xvoid iffpage PLARGS((void));
- Xvoid ifftidy PLARGS((void));
- Xvoid iffcolor PLARGS((PLINT color));
- Xvoid ifftext PLARGS((void));
- Xvoid iffgraph PLARGS((void));
- Xvoid iffwidth PLARGS((PLINT width));
- X
- Xvoid hp7475setup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid hp7475select PLARGS((PLINT or, char *file));
- Xvoid hp7475init PLARGS((void));
- Xvoid hp7475line PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid hp7475clear PLARGS((void));
- Xvoid hp7475page PLARGS((void));
- Xvoid hp7475tidy PLARGS((void));
- Xvoid hp7475color PLARGS((PLINT color));
- Xvoid hp7475text PLARGS((void));
- Xvoid hp7475graph PLARGS((void));
- Xvoid hp7475width PLARGS((PLINT width));
- X
- Xvoid aegissetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid aegisselect PLARGS((PLINT or, char *file));
- Xvoid aegisinit PLARGS((void));
- Xvoid aegisline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid aegisclear PLARGS((void));
- Xvoid aegispage PLARGS((void));
- Xvoid aegistidy PLARGS((void));
- Xvoid aegiscolor PLARGS((PLINT color));
- Xvoid aegistext PLARGS((void));
- Xvoid aegisgraph PLARGS((void));
- Xvoid aegiswidth PLARGS((PLINT width));
- X
- Xvoid pssetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid psselect PLARGS((PLINT or, char *file));
- Xvoid psinit PLARGS((void));
- Xvoid psline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid psclear PLARGS((void));
- Xvoid pspage PLARGS((void));
- Xvoid pstidy PLARGS((void));
- Xvoid pscolor PLARGS((PLINT color));
- Xvoid pstext PLARGS((void));
- Xvoid psgraph PLARGS((void));
- Xvoid pswidth PLARGS((PLINT width));
- X
- XDISPATCH_TABLE plDispatchTable[] = {
- X /* Amiga routines */
- X {
- X /* This string appears in the device menu list. */
- X "Amiga Window",
- X /* Page Setup routine */
- X amisetup,
- X /* Orientation and file name selection */
- X amiselect,
- X /* Device initialization function pointer. */
- X amiinit,
- X /* Function to draw line between two points */
- X amiline,
- X /* Clear screen (or eject page) function. */
- X amiclear,
- X /* New page set up. */
- X amipage,
- X /* Tidy up device (flush buffers, close file, etc.) */
- X amitidy,
- X /* Function to change pen color. */
- X amicolor,
- X /* Switch to text mode. */
- X amitext,
- X /* Switch to graphics mode. */
- X amigraph,
- X /* Set pen width */
- X amiwidth
- X },
- X {
- X "Preferences Printer",
- X prefsetup,
- X prefselect,
- X prefinit,
- X prefline,
- X prefclear,
- X prefpage,
- X preftidy,
- X prefcolor,
- X preftext,
- X prefgraph,
- X prefwidth
- X },
- X {
- X "IFF Graphics File",
- X iffsetup,
- X iffselect,
- X iffinit,
- X iffline,
- X iffclear,
- X iffpage,
- X ifftidy,
- X iffcolor,
- X ifftext,
- X iffgraph,
- X iffwidth
- X },
- X {
- X "HP7475A Plotter (PLT: device)",
- X hp7475setup,
- X hp7475select,
- X hp7475init,
- X hp7475line,
- X hp7475clear,
- X hp7475page,
- X hp7475tidy,
- X hp7475color,
- X hp7475text,
- X hp7475graph,
- X hp7475width
- X },
- X {
- X "Aegis Draw File",
- X aegissetup,
- X aegisselect,
- X aegisinit,
- X aegisline,
- X aegisclear,
- X aegispage,
- X aegistidy,
- X aegiscolor,
- X aegistext,
- X aegisgraph,
- X aegiswidth
- X },
- X {
- X "PostScript File",
- X pssetup,
- X psselect,
- X psinit,
- X psline,
- X psclear,
- X pspage,
- X pstidy,
- X pscolor,
- X pstext,
- X psgraph,
- X pswidth
- X }
- X};
- X
- Xint npldrivers = (sizeof(plDispatchTable)/sizeof(struct dispatch_table));
- END_OF_FILE
- if test 4680 -ne `wc -c <'drivers/dispatch.c'`; then
- echo shar: \"'drivers/dispatch.c'\" unpacked with wrong size!
- fi
- # end of 'drivers/dispatch.c'
- fi
- if test -f 'drivers/iff.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'drivers/iff.c'\"
- else
- echo shar: Extracting \"'drivers/iff.c'\" \(4271 characters\)
- sed "s/^X//" >'drivers/iff.c' <<'END_OF_FILE'
- X/* IFF file driver. Supplied by Tomas Rokicki (Radical Eye Software) */
- X
- X#include "plplot.h"
- X#include <stdio.h>
- X
- Xstatic FILE *OutFile;
- Xstatic PLINT orient, setup=0, select=0, curwid;
- Xstatic char FileName[80];
- Xstatic char line[80];
- Xstatic PLINT xwidth, ywidth, xsubw, ysubw;
- Xstatic PLINT vxwidth, vywidth;
- Xstatic PLFLT xdotspi, ydotspi;
- X
- Xvoid iffsetup(xdpi, ydpi, xwid, ywid)
- XPLINT xwid, ywid;
- XPLFLT xdpi, ydpi;
- X{
- X xdotspi = xdpi;
- X ydotspi = ydpi;
- X xwidth = xwid;
- X ywidth = ywid;
- X setup = 1;
- X}
- X
- Xvoid iffselect(ori, name)
- XPLINT ori;
- Xchar *name;
- X{
- X orient = ori;
- X strncpy(FileName,name,sizeof(FileName)-1);
- X FileName[sizeof(FileName)-1] = '\0';
- X select = 1;
- X}
- X
- Xstatic PLINT getint(s)
- Xchar *s;
- X{
- X PLINT m;
- X
- X while(1) {
- X printf(s);
- X fgets(line,sizeof(line),stdin);
- X if(sscanf(line,"%d",&m) == 1)
- X return(m);
- X printf("No value or value out of range; please try again\n");
- X }
- X}
- X
- Xstatic PLFLT getflt(s)
- Xchar *s;
- X{
- X PLFLT m;
- X
- X while(1) {
- X printf(s);
- X fgets(line,sizeof(line),stdin);
- X if(sscanf(line,"%f",&m) == 1)
- X return(m);
- X printf("No value or value out of range; please try again\n");
- X }
- X}
- X
- Xvoid iffopenfile()
- X{
- X for(;;) {
- X if(!select) {
- X printf("Enter graphics file name. ");
- X fgets(line,sizeof(line),stdin);
- X if(sscanf(line,"%s",FileName)!=1)
- X continue;
- X }
- X
- X if (!(OutFile = fopen(FileName,"w"))) {
- X fprintf(stderr,"Can't open %s.\n",FileName);
- X select = 0;
- X }
- X else
- X break;
- X }
- X select = 0;
- X}
- X
- Xvoid iffinit()
- X{
- X int mapinit();
- X
- X if(!setup) {
- X xdotspi = getflt("Enter desired horizontal IFF resolution (dpi): ");
- X ydotspi = getflt("Enter desired vertical IFF resolution (dpi): ");
- X xwidth = getint("Enter desired horizontal IFF size in pixels : ");
- X ywidth = getint("Enter desired vertical IFF size in pixels : ");
- X }
- X setup = 0;
- X
- X vxwidth = xwidth*25;
- X vywidth = ywidth*25;
- X
- X if(!select)
- X orient = getint("Landscape or portrait orientation? (0 or 1) ");
- X
- X if(orient) {
- X setpxl((PLFLT)(ydotspi*25/25.4), (PLFLT)(xdotspi*25/25.4));
- X setphy(0,vywidth,0,vxwidth);
- X }
- X else {
- X setpxl((PLFLT)(xdotspi*25./25.4), (PLFLT)(ydotspi*25/25.4));
- X setphy(0,vxwidth,0,vywidth);
- X }
- X
- X xsubw = xwidth - 2;
- X ysubw = ywidth - 2;
- X
- X scol(1); /* set pen color (ignored for this driver) */
- X swid(1); /* set default pen width */
- X smod(0); /* set mode (not an interactive device) */
- X
- X /* Allocate bitmap and initialize for line drawing */
- X if(mapinit(xwidth, ywidth)) {
- X plexit("");
- X }
- X}
- X
- X/* Set IFF to test mode */
- Xvoid ifftext()
- X{
- X /* do nothing here */
- X}
- X
- X/* Set IFF to graphics mode */
- Xvoid iffgraph()
- X{
- X /* Do nothing here */
- X}
- X
- X/* Print out page */
- Xvoid iffclear()
- X{
- X void iffwritefile();
- X
- X iffwritefile((PLINT)xdotspi,(PLINT)ydotspi,OutFile);
- X fclose(OutFile) ;
- X}
- X
- Xvoid iffpage()
- X{
- X void mapclear();
- X
- X mapclear();
- X iffopenfile();
- X}
- X
- Xvoid iffwidth(width)
- XPLINT width;
- X{
- X if(width < 1)
- X curwid = 1;
- X else if(width > 3)
- X curwid = 3;
- X else
- X curwid = width;
- X}
- X
- X/* Change color */
- Xvoid iffcolor(colour)
- XPLINT colour;
- X{
- X}
- X
- Xvoid iffline(x1,y1,x2,y2)
- XPLINT x1, y1, x2, y2;
- X{
- X long xn1, yn1, xn2, yn2;
- X void mapline();
- X
- X if(orient) {
- X xn1 = (x1*ysubw)/vywidth;
- X yn1 = (y1*xsubw)/vxwidth;
- X xn2 = (x2*ysubw)/vywidth;
- X yn2 = (y2*xsubw)/vxwidth;
- X switch(curwid) {
- X case 3:
- X mapline(yn1,xn1,yn2,xn2);
- X case 2:
- X mapline(yn1+2,xn1+2,yn2+2,xn2+2);
- X case 1:
- X default:
- X mapline(yn1+1,xn1+1,yn2+1,xn2+1);
- X }
- X }
- X else {
- X xn1 = (x1*xsubw)/vxwidth;
- X yn1 = (y1*ysubw)/vywidth;
- X xn2 = (x2*xsubw)/vxwidth;
- X yn2 = (y2*ysubw)/vywidth;
- X switch(curwid) {
- X case 3:
- X mapline(xn1,ysubw-yn1,xn2,ysubw-yn2);
- X case 2:
- X mapline(xn1+2,ysubw-yn1+2,xn2+2,ysubw-yn2+2);
- X case 1:
- X default:
- X mapline(xn1+1,ysubw-yn1+1,xn2+1,ysubw-yn2+1);
- X }
- X }
- X}
- X
- X/* Reset printer and close file */
- Xvoid ifftidy()
- X{
- X void iffwritefile(), mapfree();
- X
- X iffwritefile((PLINT)xdotspi,(PLINT)ydotspi,OutFile);
- X fclose(OutFile) ;
- X mapfree();
- X}
- X
- END_OF_FILE
- if test 4271 -ne `wc -c <'drivers/iff.c'`; then
- echo shar: \"'drivers/iff.c'\" unpacked with wrong size!
- fi
- # end of 'drivers/iff.c'
- fi
- if test -f 'src/global.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/global.c'\"
- else
- echo shar: Extracting \"'src/global.c'\" \(6662 characters\)
- sed "s/^X//" >'src/global.c' <<'END_OF_FILE'
- X/* Sets and gets global variables */
- X
- X#include "plplot.h"
- X#include "declare.h"
- X
- Xvoid glev(n)
- XPLINT *n;
- X{
- X *n = level;
- X}
- X
- Xvoid slev(n)
- XPLINT n;
- X{
- X level = n;
- X}
- X
- Xvoid gbase(x,y,xc,yc)
- XPLFLT *x,*y,*xc,*yc;
- X{
- X *x = base3x;
- X *y = base3y;
- X *xc = basecx;
- X *yc = basecy;
- X}
- X
- Xvoid sbase(x,y,xc,yc)
- XPLFLT x,y,xc,yc;
- X{
- X base3x = x;
- X base3y = y;
- X basecx = xc;
- X basecy = yc;
- X}
- X
- Xvoid gnms(n)
- XPLINT *n;
- X{
- X *n = nms;
- X}
- X
- Xvoid snms(n)
- XPLINT n;
- X{
- X nms = n;
- X}
- X
- Xvoid gdev(dev,term,gra)
- XPLINT *dev,*term,*gra;
- X{
- X *dev = device;
- X *term = termin;
- X *gra = graphx;
- X}
- X
- Xvoid sdev(dev,term,gra)
- XPLINT dev,term,gra;
- X{
- X device = dev;
- X termin = term;
- X graphx = gra;
- X}
- X
- Xvoid smod(term)
- XPLINT term;
- X{
- X termin = term;
- X}
- X
- Xvoid gcurr(ix,iy)
- XPLINT *ix,*iy;
- X{
- X *ix = currx;
- X *iy = curry;
- X}
- X
- Xvoid scurr(ix,iy)
- XPLINT ix,iy;
- X{
- X currx = ix;
- X curry = iy;
- X}
- X
- Xvoid gdom(xmin,xmax,ymin,ymax)
- XPLFLT *xmin,*xmax,*ymin,*ymax;
- X{
- X *xmin = domxmi;
- X *xmax = domxma;
- X *ymin = domymi;
- X *ymax = domyma;
- X}
- X
- Xvoid sdom(xmin,xmax,ymin,ymax)
- XPLFLT xmin,xmax,ymin,ymax;
- X{
- X domxmi = xmin;
- X domxma = xmax;
- X domymi = ymin;
- X domyma = ymax;
- X}
- X
- Xvoid grange(zscl,zmin,zmax)
- XPLFLT *zscl,*zmin,*zmax;
- X{
- X *zscl = zzscl;
- X *zmin = ranmi;
- X *zmax = ranma;
- X}
- X
- Xvoid srange(zscl,zmin,zmax)
- XPLFLT zscl,zmin,zmax;
- X{
- X zzscl = zscl;
- X ranmi = zmin;
- X ranma = zmax;
- X}
- X
- Xvoid gw3wc(dxx,dxy,dyx,dyy,dyz)
- XPLFLT *dxx,*dxy,*dyx,*dyy,*dyz;
- X{
- X *dxx = cxx;
- X *dxy = cxy;
- X *dyx = cyx;
- X *dyy = cyy;
- X *dyz = cyz;
- X}
- X
- Xvoid sw3wc(dxx,dxy,dyx,dyy,dyz)
- XPLFLT dxx,dxy,dyx,dyy,dyz;
- X{
- X cxx = dxx;
- X cxy = dxy;
- X cyx = dyx;
- X cyy = dyy;
- X cyz = dyz;
- X}
- X
- Xvoid gvpp(ixmin,ixmax,iymin,iymax)
- XPLINT *ixmin,*ixmax,*iymin,*iymax;
- X{
- X *ixmin = vppxmi;
- X *ixmax = vppxma;
- X *iymin = vppymi;
- X *iymax = vppyma;
- X}
- X
- Xvoid svpp(ixmin,ixmax,iymin,iymax)
- XPLINT ixmin,ixmax,iymin,iymax;
- X{
- X vppxmi = ixmin;
- X vppxma = ixmax;
- X vppymi = iymin;
- X vppyma = iymax;
- X}
- X
- Xvoid gspp(ixmin,ixmax,iymin,iymax)
- XPLINT *ixmin,*ixmax,*iymin,*iymax;
- X{
- X *ixmin = sppxmi;
- X *ixmax = sppxma;
- X *iymin = sppymi;
- X *iymax = sppyma;
- X}
- X
- Xvoid sspp(ixmin,ixmax,iymin,iymax)
- XPLINT ixmin,ixmax,iymin,iymax;
- X{
- X sppxmi = ixmin;
- X sppxma = ixmax;
- X sppymi = iymin;
- X sppyma = iymax;
- X}
- X
- Xvoid gclp(ixmin,ixmax,iymin,iymax)
- XPLINT *ixmin,*ixmax,*iymin,*iymax;
- X{
- X *ixmin = clpxmi;
- X *ixmax = clpxma;
- X *iymin = clpymi;
- X *iymax = clpyma;
- X}
- X
- Xvoid sclp(ixmin,ixmax,iymin,iymax)
- XPLINT ixmin,ixmax,iymin,iymax;
- X{
- X clpxmi = ixmin;
- X clpxma = ixmax;
- X clpymi = iymin;
- X clpyma = iymax;
- X}
- X
- Xvoid gphy(ixmin,ixmax,iymin,iymax)
- XPLINT *ixmin,*ixmax,*iymin,*iymax;
- X{
- X *ixmin = phyxmi;
- X *ixmax = phyxma;
- X *iymin = phyymi;
- X *iymax = phyyma;
- X}
- X
- Xvoid sphy(ixmin,ixmax,iymin,iymax)
- XPLINT ixmin,ixmax,iymin,iymax;
- X{
- X phyxmi = ixmin;
- X phyxma = ixmax;
- X phyymi = iymin;
- X phyyma = iymax;
- X}
- X
- Xvoid gsub(nx,ny,cs)
- XPLINT *nx,*ny,*cs;
- X{
- X *nx = nsubx;
- X *ny = nsuby;
- X *cs = cursub;
- X}
- X
- Xvoid ssub(nx,ny,cs)
- XPLINT nx,ny,cs;
- X{
- X nsubx = nx;
- X nsuby = ny;
- X cursub = cs;
- X}
- X
- Xvoid gumpix(ix,iy)
- XPLINT *ix,*iy;
- X{
- X *ix = umx;
- X *iy = umy;
- X}
- X
- Xvoid sumpix(ix,iy)
- XPLINT ix,iy;
- X{
- X umx = ix;
- X umy = iy;
- X}
- X
- Xvoid gatt(ifnt,icol)
- XPLINT *ifnt,*icol;
- X{
- X *ifnt = font;
- X *icol = colour;
- X}
- X
- Xvoid satt(ifnt,icol)
- XPLINT ifnt,icol;
- X{
- X font = ifnt;
- X colour = icol;
- X}
- X
- Xvoid gcol(icol)
- XPLINT *icol;
- X{
- X *icol = colour;
- X}
- X
- Xvoid scol(icol)
- XPLINT icol;
- X{
- X colour = icol;
- X}
- X
- Xvoid gwid(pwid)
- XPLINT *pwid;
- X{
- X *pwid = width;
- X}
- X
- Xvoid swid(pwid)
- XPLINT pwid;
- X{
- X width = pwid;
- X}
- X
- Xvoid gspd(xmin,xmax,ymin,ymax)
- XPLFLT *xmin,*xmax,*ymin,*ymax;
- X{
- X *xmin = spdxmi;
- X *xmax = spdxma;
- X *ymin = spdymi;
- X *ymax = spdyma;
- X}
- X
- Xvoid sspd(xmin,xmax,ymin,ymax)
- XPLFLT xmin,xmax,ymin,ymax;
- X{
- X spdxmi = xmin;
- X spdxma = xmax;
- X spdymi = ymin;
- X spdyma = ymax;
- X}
- X
- Xvoid gvpd(xmin,xmax,ymin,ymax)
- XPLFLT *xmin,*xmax,*ymin,*ymax;
- X{
- X *xmin = vpdxmi;
- X *xmax = vpdxma;
- X *ymin = vpdymi;
- X *ymax = vpdyma;
- X}
- X
- Xvoid svpd(xmin,xmax,ymin,ymax)
- XPLFLT xmin,xmax,ymin,ymax;
- X{
- X vpdxmi = xmin;
- X vpdxma = xmax;
- X vpdymi = ymin;
- X vpdyma = ymax;
- X}
- X
- Xvoid gvpw(xmin,xmax,ymin,ymax)
- XPLFLT *xmin,*xmax,*ymin,*ymax;
- X{
- X *xmin = vpwxmi;
- X *xmax = vpwxma;
- X *ymin = vpwymi;
- X *ymax = vpwyma;
- X}
- X
- Xvoid svpw(xmin,xmax,ymin,ymax)
- XPLFLT xmin,xmax,ymin,ymax;
- X{
- X vpwxmi = xmin;
- X vpwxma = xmax;
- X vpwymi = ymin;
- X vpwyma = ymax;
- X}
- X
- Xvoid gpixmm(x,y)
- XPLFLT *x,*y;
- X{
- X *x = xpmm;
- X *y = ypmm;
- X}
- X
- Xvoid spixmm(x,y)
- XPLFLT x,y;
- X{
- X xpmm = x;
- X ypmm = y;
- X}
- X
- Xvoid gwp(xscl,xoff,yscl,yoff)
- XPLFLT *xscl,*xoff,*yscl,*yoff;
- X{
- X *xscl = wpxscl;
- X *xoff = wpxoff;
- X *yscl = wpyscl;
- X *yoff = wpyoff;
- X}
- X
- Xvoid swp(xscl,xoff,yscl,yoff)
- XPLFLT xscl,xoff,yscl,yoff;
- X{
- X wpxscl = xscl;
- X wpxoff = xoff;
- X wpyscl = yscl;
- X wpyoff = yoff;
- X}
- X
- Xvoid gwm(xscl,xoff,yscl,yoff)
- XPLFLT *xscl,*xoff,*yscl,*yoff;
- X{
- X *xscl = wmxscl;
- X *xoff = wmxoff;
- X *yscl = wmyscl;
- X *yoff = wmyoff;
- X}
- X
- Xvoid swm(xscl,xoff,yscl,yoff)
- XPLFLT xscl,xoff,yscl,yoff;
- X{
- X wmxscl = xscl;
- X wmxoff = xoff;
- X wmyscl = yscl;
- X wmyoff = yoff;
- X}
- X
- Xvoid gdp(xscl,xoff,yscl,yoff)
- XPLFLT *xscl,*xoff,*yscl,*yoff;
- X{
- X *xscl = dpxscl;
- X *xoff = dpxoff;
- X *yscl = dpyscl;
- X *yoff = dpyoff;
- X}
- X
- Xvoid sdp(xscl,xoff,yscl,yoff)
- XPLFLT xscl,xoff,yscl,yoff;
- X{
- X dpxscl = xscl;
- X dpxoff = xoff;
- X dpyscl = yscl;
- X dpyoff = yoff;
- X}
- X
- Xvoid gmp(xscl,xoff,yscl,yoff)
- XPLFLT *xscl,*xoff,*yscl,*yoff;
- X{
- X *xscl = mpxscl;
- X *xoff = mpxoff;
- X *yscl = mpyscl;
- X *yoff = mpyoff;
- X}
- X
- Xvoid smp(xscl,xoff,yscl,yoff)
- XPLFLT xscl,xoff,yscl,yoff;
- X{
- X mpxscl = xscl;
- X mpxoff = xoff;
- X mpyscl = yscl;
- X mpyoff = yoff;
- X}
- X
- Xvoid gchr(def,ht)
- XPLFLT *def,*ht;
- X{
- X *def = chrdef;
- X *ht = chrht;
- X}
- X
- Xvoid schr(def,ht)
- XPLFLT def,ht;
- X{
- X chrdef = def;
- X chrht = ht;
- X}
- X
- Xvoid gsym(def,ht)
- XPLFLT *def,*ht;
- X{
- X *def = symdef;
- X *ht = symht;
- X}
- X
- Xvoid ssym(def,ht)
- XPLFLT def,ht;
- X{
- X symdef = def;
- X symht = ht;
- X}
- X
- Xvoid gmaj(def,ht)
- XPLFLT *def,*ht;
- X{
- X *def = majdef;
- X *ht = majht;
- X}
- X
- Xvoid smaj(def,ht)
- XPLFLT def,ht;
- X{
- X majdef = def;
- X majht = ht;
- X}
- X
- Xvoid gmin(def,ht)
- XPLFLT *def,*ht;
- X{
- X *def = mindef;
- X *ht = minht;
- X}
- X
- Xvoid smin(def,ht)
- XPLFLT def,ht;
- X{
- X mindef = def;
- X minht = ht;
- X}
- X
- END_OF_FILE
- if test 6662 -ne `wc -c <'src/global.c'`; then
- echo shar: \"'src/global.c'\" unpacked with wrong size!
- fi
- # end of 'src/global.c'
- fi
- if test -f 'src/plcntr.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/plcntr.c'\"
- else
- echo shar: Extracting \"'src/plcntr.c'\" \(5746 characters\)
- sed "s/^X//" >'src/plcntr.c' <<'END_OF_FILE'
- X/* points is a pointer to a 2d array of nx by ny points. */
- X/* iscan has nx elements. ixstor and iystor each have nstor elements. */
- X
- X#include "plplot.h"
- X
- Xvoid plcntr(points,nx,ny,kx,lx,ky,ly,zlev,iscan,ixstor,iystor,nstor,pltr)
- XPLINT nx, ny, ky, ly, kx, lx, nstor;
- XPLFLT zlev, *points;
- XPLINT *iscan, *ixstor, *iystor;
- Xvoid (*pltr)();
- X{
- X PLINT kcol, krow, kstor, kscan, iwbeg, ixbeg, iybeg, izbeg;
- X PLINT iboun, iw, ix, iy, iz, ifirst, istep, ixgo, iygo;
- X PLINT l, ixg, iyg, ia, ib, ixt, iyt, jstor, next;
- X PLFLT dist, dx, dy, xnew, ynew, x, y;
- X PLFLT xlas=0., ylas=0., tpx, tpy, xt, yt;
- X
- X /* Initialize memory pointers */
- X
- X kstor = 0;
- X kscan = 0;
- X
- X for (krow=ky; krow<=ly; krow++) {
- X for (kcol=kx+1; kcol <= lx; kcol++) {
- X
- X /* Check if a contour has been crossed */
- X
- X x = *(points + (kcol-2)*ny + krow-1);
- X y = *(points + (kcol-1)*ny + krow-1);
- X if (x < zlev && y >= zlev) {
- X ixbeg = kcol-1;
- X iwbeg = kcol;
- X }
- X else if (y < zlev && x >= zlev) {
- X ixbeg = kcol;
- X iwbeg = kcol-1;
- X }
- X else
- X goto lab70;
- X
- X iybeg = krow;
- X izbeg = krow;
- X
- X /* Yes, a contour has been crossed. Check to see if it */
- X /* is a new one. */
- X
- X for(l=0;l<kscan;l++)
- X if (ixbeg == iscan[l]) goto lab70;
- X
- X /* Here is the section which follows and draws a contour */
- X
- X for (iboun=1; iboun>= -1; iboun -= 2) {
- X
- X /* Set up starting point and initial search directions */
- X
- X ix = ixbeg;
- X iy = iybeg;
- X iw = iwbeg;
- X iz = izbeg;
- X ifirst = 1;
- X istep = 0;
- X ixgo = iw - ix;
- X iygo = iz - iy;
- X
- Xlab20:
- X plccal(points,nx,ny,zlev,ix,iy,ixgo,iygo,&dist);
- X dx = dist * ixgo;
- X dy = dist * iygo;
- X xnew = ix+dx;
- X ynew = iy+dy;
- X
- X /* Has a step occured in search? */
- X
- X if (istep != 0) {
- X if (ixgo*iygo == 0) {
- X
- X /* This was a diagonal step, so interpolate missed */
- X /* point, rotating 45 degrees to get it */
- X
- X ixg = ixgo;
- X iyg = iygo;
- X plr45(&ixg,&iyg,iboun);
- X ia = iw-ixg;
- X ib = iz-iyg;
- X plccal(points,nx,ny,zlev,ia,ib,ixg,iyg,&dist);
- X (*pltr)(xlas-1,ylas-1,&tpx,&tpy);
- X drawor(tpx,tpy);
- X dx = dist*ixg;
- X dy = dist*iyg;
- X xlas = ia+dx;
- X ylas = ib+dy;
- X }
- X else {
- X if (dist > 0.5) {
- X xt = xlas;
- X xlas = xnew;
- X xnew = xt;
- X yt = ylas;
- X ylas = ynew;
- X ynew = yt;
- X }
- X }
- X }
- X if (ifirst != 1) {
- X (*pltr)(xlas-1,ylas-1,&tpx,&tpy);
- X drawor(tpx,tpy);
- X }
- X else {
- X (*pltr)(xnew-1,ynew-1,&tpx,&tpy);
- X movwor(tpx,tpy);
- X }
- X xlas = xnew;
- X ylas = ynew;
- X
- X /* Check if the contour is closed */
- X
- X if (ifirst != 1 && ix == ixbeg && iy == iybeg
- X && iw == iwbeg && iz == izbeg) {
- X (*pltr)(xlas-1,ylas-1,&tpx,&tpy);
- X drawor(tpx,tpy);
- X goto lab70;
- X }
- X ifirst = 0;
- X
- X /* Now the rotation */
- X
- X istep = 0;
- X plr45(&ixgo,&iygo,iboun);
- X iw = ix+ixgo;
- X iz = iy+iygo;
- X
- X /* Check if out of bounds */
- X
- X if (iw<kx || iw>lx || iz<ky || iz>ly) goto lab50;
- X
- X /* Has contact been lost with the contour? */
- X
- X if (*(points+(iw-1)*ny+iz-1) < zlev) {
- X
- X /* Yes, lost contact => step to new centre */
- X
- X istep = 1;
- X ix = iw;
- X iy = iz;
- X plr135(&ixgo,&iygo,iboun);
- X iw = ix+ixgo;
- X iz = iy+iygo;
- X
- X /* And do the contour memory */
- X
- X if (iy == krow) {
- X kscan = kscan+1;
- X iscan[kscan-1] = ix;
- X }
- X else if (iy>krow) {
- X kstor = kstor+1;
- X if (kstor>nstor) {
- X plexit("Heap exhausted in plcont.");
- X }
- X ixstor[kstor-1] = ix;
- X iystor[kstor-1] = iy;
- X }
- X }
- X goto lab20;
- Xlab50:
- X /* Reach here only if boundary encountered - Draw last bit */
- X
- X (*pltr)(xnew-1,ynew-1,&tpx,&tpy);
- X drawor(tpx,tpy);
- X }
- Xlab70:
- X ; /* Null statement to carry label */
- X }
- X
- X /* Search of row complete - set up memory of next row in iscan and */
- X /* edit ixstor and iystor */
- X
- X if (krow<ny) {
- X jstor = 0;
- X kscan = 0;
- X next = krow+1;
- X for (l=1; l<=kstor; l++) {
- X ixt = ixstor[l-1];
- X iyt = iystor[l-1];
- X
- X /* Memory of next row into iscan */
- X
- X if (iyt == next) {
- X kscan = kscan+1;
- X iscan[kscan-1] = ixt;
- X
- X /* Retain memory of rows to come, and forget rest */
- X
- X }
- X else if (iyt>next) {
- X jstor = jstor+1;
- X ixstor[jstor-1] = ixt;
- X iystor[jstor-1] = iyt;
- X }
- X }
- X kstor = jstor;
- X }
- X }
- X}
- END_OF_FILE
- if test 5746 -ne `wc -c <'src/plcntr.c'`; then
- echo shar: \"'src/plcntr.c'\" unpacked with wrong size!
- fi
- # end of 'src/plcntr.c'
- fi
- if test -f 'src/plfill.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/plfill.c'\"
- else
- echo shar: Extracting \"'src/plfill.c'\" \(5226 characters\)
- sed "s/^X//" >'src/plfill.c' <<'END_OF_FILE'
- X#include "plplot.h"
- X#include "declare.h"
- X#include <math.h>
- X#ifdef PLSTDC
- X#include <stdlib.h>
- X#else
- Xextern char *malloc();
- Xextern char *realloc();
- Xextern void free();
- X#endif
- X
- X#define betw(ix,ia,ib) (((ix)<=(ia)&&(ix)>=(ib)) || ((ix)>=(ia)&&(ix)<=(ib)))
- X#define ssqr(a,b) sqrt((a)*(a)+(b)*(b))
- X#define sign(a) ((a)<0 ? -1 : 1)
- X#define DTOR 0.0174533
- X#define BINC 50
- X
- Xstruct point {
- X short x, y;
- X};
- X
- Xstatic short bufferleng, buffersize, *buffer;
- X
- Xvoid plfill(n,x,y)
- XPLINT n;
- XPLFLT *x, *y;
- X{
- X PLINT i,level;
- X PLINT xmin, ymin, x1, y1, x2, y2, x3, y3;
- X PLINT k, dinc;
- X PLFLT ci, si, thetd;
- X short swap;
- X int compare();
- X void buildlist(), qsort(), tran();
- X
- X glev(&level);
- X if (level<3) plexit("Please set up window before calling plfill.");
- X if (n<3) plexit("Not enough points in plfill object!");
- X
- X buffersize = 2*BINC;
- X buffer = (short *)malloc(buffersize*sizeof(short));
- X if(!buffer)
- X plexit("Out of memory in plfill.");
- X
- X for(k=0; k<nps; k++) {
- X bufferleng = 0;
- X
- X if(abs(inclin[k]) <= 450) {
- X thetd = atan(tan(DTOR*inclin[k]/10.)*ypmm/xpmm);
- X swap = 0;
- X }
- X else {
- X thetd = atan(tan(DTOR*sign(inclin[k])*
- X (abs(inclin[k])-900)/10.)*xpmm/ypmm);
- X swap = 1;
- X }
- X ci = cos(thetd);
- X si = sin(thetd);
- X if(swap)
- X dinc = delta[k]*ssqr(xpmm*abs(ci),ypmm*abs(si))/1000.;
- X else
- X dinc = delta[k]*ssqr(ypmm*abs(ci),xpmm*abs(si))/1000.;
- X
- X xmin = wcpcx(x[0]); ymin = wcpcy(y[0]);
- X for(i=1; i<n; i++) {
- X xmin = min(xmin,wcpcx(x[i]));
- X ymin = min(ymin,wcpcy(y[i]));
- X }
- X
- X x1 = wcpcx(x[0]) - xmin;
- X y1 = wcpcy(y[0]) - ymin;
- X tran(&x1,&y1,ci,si);
- X x2 = wcpcx(x[1]) - xmin;
- X y2 = wcpcy(y[1]) - ymin;
- X tran(&x2,&y2,ci,si);
- X for(i=2; i<n; i++) {
- X x3 = wcpcx(x[i]) - xmin;
- X y3 = wcpcy(y[i]) - ymin;
- X tran(&x3,&y3,ci,si);
- X if(swap)
- X buildlist(y1,x1,y2,x2,y3,x3,dinc);
- X else
- X buildlist(x1,y1,x2,y2,x3,y3,dinc);
- X x1 = x2; y1 = y2;
- X x2 = x3; y2 = y3;
- X }
- X x3 = wcpcx(x[0]) - xmin;
- X y3 = wcpcy(y[0]) - ymin;
- X tran(&x3,&y3,ci,si);
- X if(swap)
- X buildlist(y1,x1,y2,x2,y3,x3,dinc);
- X else
- X buildlist(x1,y1,x2,y2,x3,y3,dinc);
- X
- X x1 = x2; y1 = y2;
- X x2 = x3; y2 = y3;
- X x3 = wcpcx(x[1]) - xmin;
- X y3 = wcpcy(y[1]) - ymin;
- X tran(&x3,&y3,ci,si);
- X if(swap)
- X buildlist(y1,x1,y2,x2,y3,x3,dinc);
- X else
- X buildlist(x1,y1,x2,y2,x3,y3,dinc);
- X
- X /* Sort list by y then x */
- X qsort((char *)buffer,bufferleng/2,sizeof(struct point),compare);
- X
- X /* OK, now do the hatching */
- X i = 0;
- X while(i<bufferleng) {
- X if(swap) {
- X x1 = buffer[i+1]; y1 = buffer[i];
- X }
- X else {
- X x1 = buffer[i]; y1 = buffer[i+1];
- X }
- X i += 2;
- X x2 = x1; y2 = y1;
- X tran(&x1,&y1,ci,-si);
- X movphy(x1+xmin,y1+ymin);
- X if(swap) {
- X x1 = buffer[i+1]; y1 = buffer[i];
- X }
- X else {
- X x1 = buffer[i]; y1 = buffer[i+1];
- X }
- X i += 2;
- X if((swap && x2 != x1) || (!swap && y2 != y1))
- X continue; /* Uh oh we're lost */
- X tran(&x1,&y1,ci,-si);
- X draphy(x1+xmin,y1+ymin);
- X }
- X
- X }
- X free((VOID *)buffer);
- X}
- X
- Xvoid tran(a,b,c,d)
- XPLINT *a, *b;
- XPLFLT c, d;
- X{
- X PLINT ta, tb;
- X
- X ta = *a;
- X tb = *b;
- X
- X *a = round(ta*c + tb*d);
- X *b = round(tb*c - ta*d);
- X}
- X
- Xvoid buildlist(x1,y1,x2,y2,x3,y3,dinc)
- Xint x1, y1, x2, y2, x3, y3;
- X{
- X int i;
- X int dx, dy, cstep, nstep, lines, ploty, plotx;
- X void addcoord();
- X
- X dx = x2 - x1; dy = y2 - y1;
- X
- X if(dy == 0) return;
- X
- X cstep = (y2>y1 ? 1 : -1);
- X nstep = (y3>y2 ? 1 : -1);
- X if(y3 == y2) nstep = 0;
- X
- X /* Build coordinate list */
- X lines = abs(dy)/dinc + 1;
- X if(cstep == 1 && y1 > 0)
- X ploty = (y1/dinc + 1)*dinc;
- X else if (cstep == -1 && y1 < 0)
- X ploty = (y1/dinc - 1)*dinc;
- X else
- X ploty = (y1/dinc)*dinc;
- X
- X for(i=0; i<lines; i++) {
- X if(!betw(ploty,y1,y2)) break;
- X plotx = x1 + round(((float)(ploty-y1)*dx)/dy + .5);
- X /* Check for extremum at end point, otherwise add to coord list */
- X if(!((ploty == y1) || (ploty == y2 && nstep != cstep)))
- X addcoord(plotx,ploty);
- X ploty += cstep*dinc;
- X }
- X}
- X
- Xvoid addcoord(x1, y1)
- Xint x1, y1;
- X{
- X short *temp;
- X
- X if(bufferleng + 2 > buffersize) {
- X buffersize += 2*BINC;
- X temp = (short *)realloc((VOID *)buffer,buffersize*sizeof(short));
- X if(!temp) {
- X free((VOID *)buffer);
- X plexit("Out of memory in plfill!");
- X }
- X buffer = temp;
- X }
- X
- X buffer[bufferleng++] = x1;
- X buffer[bufferleng++] = y1;
- X}
- X
- Xint compare(pnum1, pnum2)
- Xchar *pnum1, *pnum2;
- X{
- X struct point *pnt1, *pnt2;
- X
- X pnt1 = (struct point *)pnum1;
- X pnt2 = (struct point *)pnum2;
- X
- X if(pnt1->y < pnt2->y)
- X return(-1);
- X else if(pnt1->y > pnt2->y)
- X return(1);
- X
- X /* Only reach here if y coords are equal, so sort by x */
- X if(pnt1->x < pnt2->x)
- X return(-1);
- X else if(pnt1->x > pnt2->x)
- X return(1);
- X
- X return(0);
- X}
- END_OF_FILE
- if test 5226 -ne `wc -c <'src/plfill.c'`; then
- echo shar: \"'src/plfill.c'\" unpacked with wrong size!
- fi
- # end of 'src/plfill.c'
- fi
- if test -f 'src/plzbx.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/plzbx.c'\"
- else
- echo shar: Extracting \"'src/plzbx.c'\" \(4379 characters\)
- sed "s/^X//" >'src/plzbx.c' <<'END_OF_FILE'
- X/* This draws a vertical line from (wx,wy1) to (wx,wy2) */
- X/* which represents the vertical axis of a 3-d graph with data */
- X/* values from "vmin" to "vmax". Depending on "opt", ticks and/or*/
- X/* subticks are placed on the line at major tick interval "tick" */
- X/* with "nsub" subticks between major ticks. If "tick" and/or */
- X/* "nsub" is zero, automatic tick positions are computed */
- X
- X/* B: Draws left-hand axis*/
- X/* C: Draws right-hand axis*/
- X/* I: Inverts tick marks (i.e. drawn to the left) */
- X/* L: Logarithmic axes, major ticks at decades, minor ticks at units*/
- X/* M: Write numeric label on right axis*/
- X/* N: Write numeric label on left axis*/
- X/* S: Draw minor tick marks */
- X/* T: Draw major tick marks */
- X/* U: Writes left-hand label*/
- X/* V: Writes right-hand label*/
- X
- X#include "plplot.h"
- X#include <stdio.h>
- X#include <math.h>
- X
- X#define betw(c,a,b) ((a <= c && c <= b) || (b <= c && c <= a))
- X
- Xstatic PLFLT xlog[8] =
- X {0.301030,0.477121,0.602060,0.698970,0.778151,0.845098,
- X 0.903090,0.954243};
- X
- Xvoid plzbx(opt,label,right,dx,dy,wx,wy1,wy2,vmin,vmax,tick,nsub)
- Xchar *opt, *label;
- XPLFLT dx, dy, wx, wy1, wy2, vmin, vmax, tick;
- XPLINT nsub, right;
- X{
- X static char string[40];
- X PLINT lb,lc,li,ll,lm,ln,ls,lt,lu,lv;
- X PLINT i, mode, prec;
- X PLINT nsub1;
- X PLFLT xpmm, ypmm, defmaj, defmin, tick1;
- X PLFLT pos, tn, tp, temp;
- X PLFLT dwy, lambda, diag, major, minor, xmajor, xminor;
- X PLFLT ymajor, yminor, dxm, dym, xscl, xoff, yscl, yoff;
- X
- X dwy = wy2 - wy1;
- X
- X /* Tick and subtick sizes in device coords */
- X
- X gpixmm(&xpmm,&ypmm);
- X gmaj(&defmaj,&major);
- X gmin(&defmin,&minor);
- X
- X tick1=tick;
- X nsub1=nsub;
- X
- X lb=stsearch(opt,'b');
- X lc=stsearch(opt,'c');
- X li=stsearch(opt,'i');
- X ll=stsearch(opt,'l');
- X lm=stsearch(opt,'m');
- X ln=stsearch(opt,'n');
- X ls=stsearch(opt,'s');
- X lt=stsearch(opt,'t');
- X lu=stsearch(opt,'u');
- X lv=stsearch(opt,'v');
- X
- X if (lu && !right)
- X plztx("h",dx,dy,wx,wy1,wy2,(PLFLT)5.0,(PLFLT)0.5,(PLFLT)0.5,label);
- X if (lv && right)
- X plztx("h",dx,dy,wx,wy1,wy2,(PLFLT)-5.0,(PLFLT)0.5,(PLFLT)0.5,label);
- X
- X if (right && !lc)
- X return;
- X if (!right && !lb)
- X return;
- X
- X if (ll)
- X tick1 = (PLFLT)1.0;
- X if (lt)
- X pldtik(vmin,vmax,&tick1,&nsub1,&mode,&prec);
- X
- X if ( (li && !right) || (!li && right) ) {
- X minor = -minor;
- X major = -major;
- X }
- X
- X gwm(&xscl,&xoff,&yscl,&yoff);
- X dxm = dx * xscl;
- X dym = dy * yscl;
- X diag = sqrt(dxm*dxm + dym*dym);
- X
- X xminor = minor * dxm/diag;
- X xmajor = major * dxm/diag;
- X yminor = minor * dym/diag;
- X ymajor = major * dym/diag;
- X
- X /* Draw the line */
- X
- X movwor(wx,wy1);
- X if (lt) {
- X tp=tick1*floor(vmin/tick1);
- X for(;;) {
- X tn=tp+tick1;
- X if (ls) {
- X if (ll) {
- X for (i=0; i <= 7; i++) {
- X temp=tp+xlog[i];
- X if (betw(temp,vmin,vmax)) {
- X lambda = (temp-vmin)/(vmax-vmin);
- X plstik(wcmmx(wx),wcmmy((PLFLT)(wy1+lambda*dwy)),xminor,yminor);
- X }
- X }
- X }
- X else {
- X for (i=1; i<= nsub1-1; i++) {
- X temp=tp+i*tick1/nsub1;
- X if (betw(temp,vmin,vmax)) {
- X lambda = (temp-vmin)/(vmax-vmin);
- X plstik(wcmmx(wx),wcmmy((PLFLT)(wy1+lambda*dwy)),xminor,yminor);
- X }
- X }
- X }
- X }
- X temp=tn;
- X if (!betw(temp,vmin,vmax))
- X break;
- X lambda = (temp-vmin)/(vmax-vmin);
- X plstik(wcmmx(wx),wcmmy((PLFLT)(wy1+lambda*dwy)),xmajor,ymajor);
- X tp=tn;
- X }
- X }
- X
- X drawor(wx,wy2);
- X
- X /* Label the line */
- X
- X if (ln && lt) {
- X tp=tick1*floor(vmin/tick1);
- X for(tn=tp+tick1; betw(tn,vmin,vmax); tn+=tick1) {
- X if (!ll)
- X plform(tn,mode,prec,string);
- X else
- X sprintf(string,"10#u%d",round(tn));
- X pos=(tn-vmin)/(vmax-vmin);
- X if (ln && !right)
- X plztx("v",dx,dy,wx,wy1,wy2,(PLFLT)0.5,pos,(PLFLT)1.0,string);
- X if (lm && right)
- X plztx("v",dx,dy,wx,wy1,wy2,(PLFLT)-0.5,pos,(PLFLT)0.0,string);
- X }
- X }
- X}
- END_OF_FILE
- if test 4379 -ne `wc -c <'src/plzbx.c'`; then
- echo shar: \"'src/plzbx.c'\" unpacked with wrong size!
- fi
- # end of 'src/plzbx.c'
- fi
- if test -f 'unix/dispatch.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'unix/dispatch.c'\"
- else
- echo shar: Extracting \"'unix/dispatch.c'\" \(6432 characters\)
- sed "s/^X//" >'unix/dispatch.c' <<'END_OF_FILE'
- X#include "plplot.h"
- X#include "dispatch.h"
- X
- Xvoid xtesetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid xteselect PLARGS((PLINT or, char *file));
- Xvoid xteinit PLARGS((void));
- Xvoid xteline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid xteclear PLARGS((void));
- Xvoid xtepage PLARGS((void));
- Xvoid xtetidy PLARGS((void));
- Xvoid xtecolor PLARGS((PLINT color));
- Xvoid xtetext PLARGS((void));
- Xvoid xtegraph PLARGS((void));
- Xvoid xtewidth PLARGS((PLINT width));
- X
- Xvoid tektsetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid tekfsetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid tektselect PLARGS((PLINT or, char *file));
- Xvoid tekfselect PLARGS((PLINT or, char *file));
- Xvoid tektinit PLARGS((void));
- Xvoid tekfinit PLARGS((void));
- Xvoid tekline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid tektclear PLARGS((void));
- Xvoid tekfclear PLARGS((void));
- Xvoid tekpage PLARGS((void));
- Xvoid tekttidy PLARGS((void));
- Xvoid tekftidy PLARGS((void));
- Xvoid tekcolor PLARGS((PLINT color));
- Xvoid tektext PLARGS((void));
- Xvoid tekgraph PLARGS((void));
- Xvoid tekwidth PLARGS((PLINT width));
- X
- Xvoid dgsetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid dgselect PLARGS((PLINT or, char *file));
- Xvoid dginit PLARGS((void));
- Xvoid dgline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid dgclear PLARGS((void));
- Xvoid dgpage PLARGS((void));
- Xvoid dgtidy PLARGS((void));
- Xvoid dgcolor PLARGS((PLINT color));
- Xvoid dgtext PLARGS((void));
- Xvoid dggraph PLARGS((void));
- Xvoid dgwidth PLARGS((PLINT width));
- X
- Xvoid hp7470setup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid hp7470select PLARGS((PLINT or, char *file));
- Xvoid hp7470init PLARGS((void));
- Xvoid hp7470line PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid hp7470clear PLARGS((void));
- Xvoid hp7470page PLARGS((void));
- Xvoid hp7470tidy PLARGS((void));
- Xvoid hp7470color PLARGS((PLINT color));
- Xvoid hp7470text PLARGS((void));
- Xvoid hp7470graph PLARGS((void));
- Xvoid hp7470width PLARGS((PLINT width));
- X
- Xvoid hp7580setup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid hp7580select PLARGS((PLINT or, char *file));
- Xvoid hp7580init PLARGS((void));
- Xvoid hp7580line PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid hp7580clear PLARGS((void));
- Xvoid hp7580page PLARGS((void));
- Xvoid hp7580tidy PLARGS((void));
- Xvoid hp7580color PLARGS((PLINT color));
- Xvoid hp7580text PLARGS((void));
- Xvoid hp7580graph PLARGS((void));
- Xvoid hp7580width PLARGS((PLINT width));
- X
- Xvoid impsetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid impselect PLARGS((PLINT or, char *file));
- Xvoid impinit PLARGS((void));
- Xvoid impline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid impclear PLARGS((void));
- Xvoid imppage PLARGS((void));
- Xvoid imptidy PLARGS((void));
- Xvoid impcolor PLARGS((PLINT color));
- Xvoid imptext PLARGS((void));
- Xvoid impgraph PLARGS((void));
- Xvoid impwidth PLARGS((PLINT width));
- X
- Xvoid jetsetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid jetselect PLARGS((PLINT or, char *file));
- Xvoid jetinit PLARGS((void));
- Xvoid jetline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid jetclear PLARGS((void));
- Xvoid jetpage PLARGS((void));
- Xvoid jettidy PLARGS((void));
- Xvoid jetcolor PLARGS((PLINT color));
- Xvoid jettext PLARGS((void));
- Xvoid jetgraph PLARGS((void));
- Xvoid jetwidth PLARGS((PLINT width));
- X
- Xvoid pssetup PLARGS((PLFLT xdpi, PLFLT ydpi, PLINT xsize, PLINT ysize));
- Xvoid psselect PLARGS((PLINT or, char *file));
- Xvoid psinit PLARGS((void));
- Xvoid psline PLARGS((PLINT x1, PLINT y1, PLINT x2, PLINT y2));
- Xvoid psclear PLARGS((void));
- Xvoid pspage PLARGS((void));
- Xvoid pstidy PLARGS((void));
- Xvoid pscolor PLARGS((PLINT color));
- Xvoid pstext PLARGS((void));
- Xvoid psgraph PLARGS((void));
- Xvoid pswidth PLARGS((PLINT width));
- X
- XDISPATCH_TABLE plDispatchTable[] = {
- X /* Xterm routines */
- X {
- X /* This string appears in the device menu list. */
- X "Xterm Window",
- X /* Page Setup routine */
- X xtesetup,
- X /* Orientation and file name selection */
- X xteselect,
- X /* Device initialization function pointer. */
- X xteinit,
- X /* Function to draw line between two points */
- X xteline,
- X /* Clear screen (or eject page) function. */
- X xteclear,
- X /* New page set up. */
- X xtepage,
- X /* Tidy up device (flush buffers, close file, etc.) */
- X xtetidy,
- X /* Function to change pen color. */
- X xtecolor,
- X /* Switch to text mode. */
- X xtetext,
- X /* Switch to graphics mode. */
- X xtegraph,
- X /* Set pen width */
- X xtewidth
- X },
- X {
- X "Tektronix Terminal",
- X tektsetup,
- X tektselect,
- X tektinit,
- X tekline,
- X tektclear,
- X tekpage,
- X tekttidy,
- X tekcolor,
- X tektext,
- X tekgraph,
- X tekwidth
- X },
- X {
- X "DG300 Terminal",
- X dgsetup,
- X dgselect,
- X dginit,
- X dgline,
- X dgclear,
- X dgpage,
- X dgtidy,
- X dgcolor,
- X dgtext,
- X dggraph,
- X dgwidth
- X },
- X {
- X "HP 7470 Plotter File (HPGL Cartridge, Small Plotter)",
- X hp7470setup,
- X hp7470select,
- X hp7470init,
- X hp7470line,
- X hp7470clear,
- X hp7470page,
- X hp7470tidy,
- X hp7470color,
- X hp7470text,
- X hp7470graph,
- X hp7470width
- X },
- X {
- X "HP 7580 Plotter File (Large Plotter)",
- X hp7580setup,
- X hp7580select,
- X hp7580init,
- X hp7580line,
- X hp7580clear,
- X hp7580page,
- X hp7580tidy,
- X hp7580color,
- X hp7580text,
- X hp7580graph,
- X hp7580width
- X },
- X {
- X "Impress File",
- X impsetup,
- X impselect,
- X impinit,
- X impline,
- X impclear,
- X imppage,
- X imptidy,
- X impcolor,
- X imptext,
- X impgraph,
- X impwidth
- X },
- X {
- X "Tektronix File",
- X tekfsetup,
- X tekfselect,
- X tekfinit,
- X tekline,
- X tekfclear,
- X tekpage,
- X tekftidy,
- X tekcolor,
- X tektext,
- X tekgraph,
- X tekwidth
- X },
- X {
- X "LaserJet II Bitmap File (150 dpi)",
- X jetsetup,
- X jetselect,
- X jetinit,
- X jetline,
- X jetclear,
- X jetpage,
- X jettidy,
- X jetcolor,
- X jettext,
- X jetgraph,
- X jetwidth
- X },
- X {
- X "PostScript File",
- X pssetup,
- X psselect,
- X psinit,
- X psline,
- X psclear,
- X pspage,
- X pstidy,
- X pscolor,
- X pstext,
- X psgraph,
- X pswidth
- X }
- X};
- X
- Xint npldrivers = (sizeof(plDispatchTable)/sizeof(struct dispatch_table));
- END_OF_FILE
- if test 6432 -ne `wc -c <'unix/dispatch.c'`; then
- echo shar: \"'unix/dispatch.c'\" unpacked with wrong size!
- fi
- # end of 'unix/dispatch.c'
- fi
- if test -f 'unix/impress.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'unix/impress.c'\"
- else
- echo shar: Extracting \"'unix/impress.c'\" \(5079 characters\)
- sed "s/^X//" >'unix/impress.c' <<'END_OF_FILE'
- X/* This file contains the IMPRESS device dependent subroutines for */
- X/* use with plplot. */
- X
- X#include "plplot.h"
- X#include <stdio.h>
- X#include <limits.h>
- X
- X#define SET_HV_SYSTEM 0315
- X#define OPBYTE1 031
- X#define OPBYTE2 0140
- X#define SET_ABS_H 0207
- X#define SET_ABS_V 0211
- X#define OPWORDH1 0
- X#define OPWORDH2 150
- X#define OPWORDV1 0
- X#define OPWORDV2 150
- X#define ENDPAGE 0333
- X
- X#define BUFFPTS 50
- X#define BUFFLENG 2*BUFFPTS
- X
- X#define IMPX 2999
- X#define IMPY 2249
- X
- Xstatic FILE *OutFile;
- Xstatic int porient;
- Xstatic short *LineBuff;
- Xstatic int select=0;
- Xchar FileName[80];
- X
- Xvoid flushline(void);
- X
- Xvoid impsetup(xdpi,ydpi,xwid,ywid)
- XPLINT xwid, ywid;
- XPLFLT xdpi, ydpi;
- X{
- X}
- X
- X/* Open file. Set up for graphics. */
- Xvoid impinit()
- X{
- X char response[80];
- X int ori;
- X
- X smod(0); /* not an interactive terminal */
- X scol(1);
- X swid(1);
- X setpxl(11.81,11.81);
- X
- X if(!select) {
- X printf("Landscape or portrait orientation? (0 or 1): ");
- X fgets(response,sizeof(response),stdin);
- X if(sscanf(response,"%d",&ori) != 1)
- X ori = 0; /* carriage return defaults to landscape */
- X }
- X
- X porient = ori;
- X if(!porient)
- X setphy(0,IMPX,0,IMPY);
- X else
- X setphy(0,IMPY,0,IMPX);
- X
- X OutFile = NULL;
- X while(!OutFile) {
- X if(!select) {
- X printf("Enter graphics command storage file name. ");
- X fgets(response,sizeof(response),stdin);
- X if(sscanf(response,"%s",FileName) != 1) {
- X printf("Invalid entry.n");
- X continue;
- X }
- X }
- X select = 0;
- X if ((OutFile = fopen(FileName,"w")) == NULL)
- X printf("Can't open %s.\n",FileName);
- X }
- X
- X LineBuff = (short *)malloc(BUFFLENG*sizeof(short));
- X if(LineBuff == NULL) {
- X printf("\nError in memory alloc in impini().\n");
- X exit(1);
- X }
- X fprintf(OutFile,"@Document(Language ImPress, jobheader off)");
- X fprintf(OutFile,"%c%c",SET_HV_SYSTEM,OPBYTE1);
- X fprintf(OutFile,"%c%c%c",SET_ABS_H,OPWORDH1,OPWORDH2);
- X fprintf(OutFile,"%c%c%c",SET_ABS_V,OPWORDV1,OPWORDV2);
- X fprintf(OutFile,"%c%c",SET_HV_SYSTEM,OPBYTE2);
- X}
- X
- Xvoid impselect(ori,file)
- XPLINT ori;
- Xchar *file;
- X{
- X porient = ori;
- X strncpy(FileName,file,sizeof(FileName)-1);
- X FileName[sizeof(FileName)-1] = '\0';
- X select = 1;
- X}
- X
- X/* Sets the IMPRESS to text mode */
- Xvoid imptext()
- X{
- X}
- X
- X/* Sets the IMPRESS to graphics mode */
- Xvoid impgraph()
- X{
- X}
- X
- X/* Form feed */
- Xvoid impclear()
- X{
- X flushline();
- X fprintf(OutFile,"%c",ENDPAGE);
- X}
- X
- Xstatic short FirstLine;
- X
- Xvoid imppage()
- X{
- X FirstLine = 1;
- X}
- X
- X/* May put something here someday */
- Xvoid impcolor(colour)
- XPLINT colour;
- X{
- X}
- X
- X#define SET_PEN 0350
- X
- Xstatic int penchange=0, penwidth;
- X
- Xvoid impwidth(width)
- XPLINT width;
- X{
- X if(width>0 && width <= 20) {
- X penwidth = width;
- X penchange = 1;
- X }
- X}
- X
- X#define CREATE_PATH 0346
- X#define DRAW_PATH 0352
- X#define OPTYPE 017
- X
- Xstatic short count;
- X
- Xvoid impline(x1a,y1a,x2a,y2a)
- XPLINT x1a,y1a,x2a,y2a;
- X{
- X static int xold, yold;
- X int x1, y1, x2, y2;
- X
- X if(!porient) {
- X x1 = x1a;
- X y1 = y1a;
- X x2 = x2a;
- X y2 = y2a;
- X }
- X else {
- X x1 = IMPX - y1a;
- X y1 = x1a;
- X x2 = IMPX - y2a;
- X y2 = x2a;
- X }
- X
- X if(FirstLine) {
- X if(penchange) {
- X fprintf(OutFile,"%c%c",SET_PEN,(char)penwidth);
- X penchange = 0;
- X }
- X /* Add both points to path */
- X count = 0;
- X FirstLine = 0;
- X *(LineBuff+count++) = (short)x1;
- X *(LineBuff+count++) = (short)y1;
- X *(LineBuff+count++) = (short)x2;
- X *(LineBuff+count++) = (short)y2;
- X }
- X else if((count+2) < BUFFLENG && x1 == xold && y1 == yold) {
- X /* Add new point to path */
- X *(LineBuff+count++) = (short)x2;
- X *(LineBuff+count++) = (short)y2;
- X }
- X else {
- X /* Write out old path */
- X count /= 2;
- X fprintf(OutFile,"%c%c%c",CREATE_PATH,(char)count/256,(char)count%256);
- X fwrite((char *)LineBuff,sizeof(short),2*count,OutFile);
- X fprintf(OutFile,"%c%c",DRAW_PATH,OPTYPE);
- X
- X /* And start a new path */
- X if(penchange) {
- X fprintf(OutFile,"%c%c",SET_PEN,(char)penwidth);
- X penchange = 0;
- X }
- X count = 0;
- X *(LineBuff+count++) = (short)x1;
- X *(LineBuff+count++) = (short)y1;
- X *(LineBuff+count++) = (short)x2;
- X *(LineBuff+count++) = (short)y2;
- X }
- X
- X xold = x2;
- X yold = y2;
- X}
- X
- Xvoid flushline()
- X{
- X count /= 2;
- X fprintf(OutFile,"%c%c%c",CREATE_PATH,(char)count/256,(char)count%256);
- X fwrite((char *)LineBuff,sizeof(short),2*count,OutFile);
- X fprintf(OutFile,"%c%c",DRAW_PATH,OPTYPE);
- X FirstLine = 1;
- X}
- X/* Close graphics file */
- Xvoid imptidy()
- X{
- X flushline();
- X fprintf(OutFile,"%c",ENDPAGE);
- X free((char *)LineBuff);
- X fclose(OutFile);
- X select = 0;
- X}
- END_OF_FILE
- if test 5079 -ne `wc -c <'unix/impress.c'`; then
- echo shar: \"'unix/impress.c'\" unpacked with wrong size!
- fi
- # end of 'unix/impress.c'
- fi
- if test -f 'unix/laserjetii.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'unix/laserjetii.c'\"
- else
- echo shar: Extracting \"'unix/laserjetii.c'\" \(4262 characters\)
- sed "s/^X//" >'unix/laserjetii.c' <<'END_OF_FILE'
- X/* This file contains the Laser Jet II device dependent subroutines for */
- X/* use with plplot. Only the 150 dpi mode is supported. The others */
- X/* (75,100,300) should work by just changing the value of DPI and */
- X/* changing the values passed to setphy in DEVICE.f77 */
- X
- X#include "plplot.h"
- X#include <stdio.h>
- X#include <string.h>
- X#include <math.h>
- X
- X#define DPI 150 /* Resolution Dots per Inch */
- X#define CURX 51
- X#define CURY 61
- X#define ESC 0x1b
- X#define FF 0x0c
- X#define XDOTS 1104 /* # dots across */
- X#define YDOTS 1410 /* # dots down */
- X#define BPROW XDOTS/8 /* # bytes across */
- X#define NBYTES BPROW*YDOTS /* total number of bytes */
- X
- X#define JETX 1409
- X#define JETY 1103
- X
- Xstatic FILE *OutFile;
- Xstatic int porient;
- Xstatic int select=0;
- Xchar FileName[80];
- X
- X/* bitmap contains a pointer to an area of memory NBYTES in size */
- Xstatic char *bitmap;
- X
- Xvoid jetsetup(xdpi, ydpi, xwid, ywid)
- XPLINT xwid, ywid;
- XPLFLT xdpi, ydpi;
- X{
- X}
- X
- X/* Opens the file for binary mode. */
- Xvoid jetinit()
- X{
- X char response[80];
- X int ori;
- X
- X smod(0); /* not an interactive terminal */
- X scol(1);
- X swid(1);
- X setpxl(5.905,5.905);
- X
- X if(!select) {
- X printf("Landscape or portrait orientation? (0 or 1): ");
- X fgets(response,sizeof(response),stdin);
- X if(sscanf(response,"%d",&ori) != 1)
- X ori = 0; /* carriage return defaults to landscape */
- X }
- X
- X porient = ori;
- X if(!porient)
- X setphy(0,JETX,0,JETY);
- X else
- X setphy(0,JETY,0,JETX);
- X
- X OutFile = NULL;
- X while(!OutFile) {
- X if(!select) {
- X printf("Enter graphics command storage file name. ");
- X fgets(response,sizeof(response),stdin);
- X if(sscanf(response,"%s",FileName) != 1) {
- X printf("Invalid entry.n");
- X continue;
- X }
- X }
- X if ((OutFile = fopen(FileName,"w")) == NULL)
- X printf("Can't open %s.\n",FileName);
- X select = 0;
- X }
- X
- X /* Allocate storage for bit map matrix */
- X if((bitmap = (char *)calloc(NBYTES,sizeof(char))) == NULL)
- X printf("Out of memory in call to calloc \n");
- X
- X /* Reset Printer */
- X fprintf(OutFile,"%cE",ESC);
- X}
- X
- Xvoid jetselect(ori,file)
- XPLINT ori;
- Xchar *file;
- X{
- X porient = ori;
- X strncpy(FileName,file,sizeof(FileName)-1);
- X FileName[sizeof(FileName)-1] = '\0';
- X select = 1;
- X}
- X
- X/* Set JET to test mode */
- Xvoid jettext()
- X{
- X /* do nothing here */
- X}
- X
- X/* Set JET to graphics mode */
- Xvoid jetgraph()
- X{
- X /* Do nothing here */
- X}
- X
- X/* Print out page */
- Xvoid jetclear()
- X{
- X int i,j;
- X
- X /* First move cursor to origin */
- X fprintf(OutFile,"%c*p%dX",ESC,CURX);
- X fprintf(OutFile,"%c*p%dY",ESC,CURY);
- X
- X /* Then put Laser Printer in 150 dpi mode */
- X fprintf(OutFile,"%c*t%dR",ESC,DPI);
- X fprintf(OutFile,"%c*r1A",ESC);
- X
- X /* Write out raster data */
- X for(j=0;j<YDOTS;j++){
- X fprintf(OutFile,"%c*b%dW",ESC,BPROW);
- X for(i=0;i<BPROW;i++)
- X putc(*(bitmap+i+j*BPROW),OutFile);
- X }
- X
- X /* End raster graphics and send Form Feed */
- X fprintf(OutFile,"%c*rB",ESC);
- X fprintf(OutFile,"%c",FF);
- X
- X /* Finally, clear out bitmap storage area */
- X memset(bitmap,'\0',NBYTES);
- X}
- X
- Xvoid jetpage()
- X{
- X}
- X
- X/* Change color */
- Xvoid jetcolor(colour)
- XPLINT colour;
- X{
- X}
- X
- Xvoid jetwidth(width)
- XPLINT width;
- X{
- X}
- X
- X/* Function to draw the line in the bitmap */
- Xvoid jetline(x1a,y1a,x2a,y2a)
- XPLINT x1a,y1a,x2a,y2a;
- X{
- X int i,x1,y1,x2,y2;
- X float length,fx,fy,dx,dy;
- X void setpoint();
- X
- X if(!porient) {
- X x1 = x1a;
- X y1 = y1a;
- X x2 = x2a;
- X y2 = y2a;
- X }
- X else {
- X x1 = JETX - y1a;
- X y1 = x1a;
- X x2 = JETX - y2a;
- X y2 = x2a;
- X }
- X
- X length = (float)sqrt((double)((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
- X if(length == 0.)
- X length = 1.;
- X dx = (x2 - x1)/length;
- X dy = (y2 - y1)/length;
- X
- X fx = x1;
- X fy = y1;
- X setpoint(x1,y1);
- X setpoint(x2,y2);
- X
- X for(i=1;i<=(int)length;i++)
- X setpoint((int)(fx+=dx),(int)(fy+=dy));
- X}
- X
- Xstatic char mask[8] = {'\200','\100','\040','\020','\010','\004','\002','\001'};
- X
- X/* Function to set a bit in the bitmap */
- Xstatic void setpoint(x,y)
- Xint x,y;
- X{
- X int index;
- X index = x/8 + y*BPROW;
- X *(bitmap+index) = *(bitmap+index) | mask[x%8];
- X}
- X
- X/* Reset printer and close file */
- Xvoid jettidy()
- X{
- X jetclear();
- X /* Reset Printer */
- X fprintf(OutFile,"%cE",ESC);
- X fclose(OutFile);
- X free((char *)bitmap);
- X}
- END_OF_FILE
- if test 4262 -ne `wc -c <'unix/laserjetii.c'`; then
- echo shar: \"'unix/laserjetii.c'\" unpacked with wrong size!
- fi
- # end of 'unix/laserjetii.c'
- fi
- echo shar: End of archive 5 \(of 12\).
- cp /dev/null ark5isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 12 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Submissions to comp.sources.amiga and comp.binaries.amiga should be sent to:
- amiga@cs.odu.edu
- or amiga@xanth.cs.odu.edu ( obsolescent mailers may need this address )
- or ...!uunet!xanth!amiga ( very obsolescent mailers need this address )
-
- Comments, questions, and suggestions s should be addressed to ``amiga-request''
- (only use ``amiga'' for submissions) at the above addresses.
-